// #include "common.hpp"
#include "NamedPipe.hpp"

int main()
{
    std::string fifoname = "fifo";
    NamedPipe np(fifoname);
    // 1、创建管道文件
    np.Create();

    // 2、打开管道文件
    np.OpenForRead();

    // 3、读取管道数据
    std::string message;
    while (true)
    {
        bool res = np.Read(&message);
        if (res)
        {
            std::cout << "client say# " << message << std::endl;
        }
        else
        {
            break;
        }
    }

    // 4、归还资源
    np.Close();

    return 0;
}

// int main()
// {
//     // 1、创建管道文件
//     int n = mkfifo(fifoname.c_str(), mode);
//     if (n == 0)
//     {
//         std::cout << "mkfifo suceessful" << std::endl;
//     }
//     else
//     {
//         // std::cout << "mkfifo failed" << std::endl;
//         perror("mkfifo");
//         exit(1);
//     }

//     // 2、打开管道文件
//     // 命名管道特点，在打开一端，但另一端未打开的时候，open操作会阻塞
//     int fd = open(fifoname.c_str(), O_RDONLY);
//     if (fd < 0)
//     {
//         perror("open");
//         exit(2);
//     }
//     std::cout << "open file success" << std::endl;

//     // 3、读取管道数据
//     char buffer[SIZE] = {0};
//     while (true)
//     {
//         buffer[0] = 0; // 清空字符串
//         ssize_t num = read(fd, buffer, sizeof(buffer) - 1);
//         if (num > 0) // read失败返回-1
//         {
//             buffer[num] = 0; // 保持C风格字符串，末尾加0
//             std::cout << "client say# " << buffer << std::endl;
//         }
//         else if(num == 0)
//         {
//             std::cout << "clent quit, me too!" << std::endl;
//             break;
//         }
//         else{
//             // read错误
//             break;
//         }
//         std::cout << "num: " << num << std::endl;
//     }

//     // 4、归还资源
//     close(fd);
//     int m = unlink(fifoname.c_str());
//     (void)m;
//     return 0;
// }